What is nested-error-stacks?
The nested-error-stacks npm package is used to create Error objects in Node.js that can encapsulate and display a stack trace from another error. This is useful for debugging and error handling when you want to preserve the original error context while adding additional information or handling an error at a higher level in your application.
What are nested-error-stacks's main functionalities?
Creating nested errors
This feature allows developers to create a new error that includes the stack trace of a previous error. The code sample demonstrates how to catch an error and throw a new NestedError that includes the original error's stack trace.
const NestedError = require('nested-error-stacks');
function doSomethingRisky() {
try {
// Code that might throw an error
} catch (error) {
throw new NestedError('An error occurred in doSomethingRisky', error);
}
}
Other packages similar to nested-error-stacks
verror
The verror package provides a way to create rich JavaScript errors. It allows you to chain errors, add context to them, and format multi-line error messages. It is similar to nested-error-stacks but offers more features for constructing complex error objects.
error-cause
The error-cause package is a polyfill for the Error.cause property, which is part of the ECMAScript proposal. It allows you to specify the cause of an error object, similar to nested-error-stacks, but it follows a proposed standard for JavaScript errors.
Nested stacktraces for Node.js!
With this module, you can wrap a caught exception with extra context
for better debugging. For example, a network error's stack would normally look
like this:
Error: connect ECONNREFUSED
at errnoException (net.js:904:11)
at Object.afterConnect [as oncomplete] (net.js:895:19)
Using this module, you can wrap the Error with more context to get a stack
that looks like this:
NestedError: Failed to communicate with localhost:8080
at Socket.<anonymous> (/Users/mattlavin/Projects/nested-stacks/demo.js:6:18)
at Socket.EventEmitter.emit (events.js:95:17)
at net.js:440:14
at process._tickCallback (node.js:415:13)
Caused By: Error: connect ECONNREFUSED
at errnoException (net.js:904:11)
at Object.afterConnect [as oncomplete] (net.js:895:19)
How to wrap errors
Here is an example program that uses this module to add more context to errors:
var NestedError = require('nested-error-stacks');
var net = require('net');
var client = net.connect({port: 8080});
client.on('error', function (err) {
var newErr = new NestedError("Failed to communicate with localhost:8080", err);
console.log(newErr.stack);
});
How to inherit
It is recomennded to use explicit names for Error classes. You can do it
like this:
var util = require('util');
var NestedError = require('nested-error-stacks');
function MyError(message, nested) {
NestedError.call(this, message, nested);
}
util.inherits(MyError, NestedError);
MyError.prototype.name = 'MyError';